// author: AI Assistant
// 为竖版图片专门设计的翻页过渡效果
// 使用非常宽的过渡区域确保整个画面都被正确填充

vec4 transition(vec2 p) {
  // 使用平滑的进度曲线
  float smoothProgress = smoothstep(0.0, 1.0, progress);
  
  // 使用极宽的过渡区域，几乎覆盖整个画面
  float transitionStart = smoothProgress - 1.0;
  float transitionEnd = smoothProgress + 1.0;
  
  // 确保过渡区域在画面范围内
  transitionStart = clamp(transitionStart, 0.0, 1.0);
  transitionEnd = clamp(transitionEnd, 0.0, 1.0);
  
  if (p.y <= transitionStart) {
    // 显示源图片
    vec4 color = getFromColor(p);
    // 确保颜色值不会太暗
    color.r = max(color.r, 0.2);
    color.g = max(color.g, 0.2);
    color.b = max(color.b, 0.2);
    return color;
  } else if (p.y >= transitionEnd) {
    // 显示目标图片
    vec4 color = getToColor(p);
    // 确保颜色值不会太暗
    color.r = max(color.r, 0.2);
    color.g = max(color.g, 0.2);
    color.b = max(color.b, 0.2);
    return color;
  } else {
    // 在过渡区域进行混合
    float mixValue = (p.y - transitionStart) / max(0.0001, transitionEnd - transitionStart);
    
    // 获取源图片和目标图片的颜色
    vec4 fromColor = getFromColor(p);
    vec4 toColor = getToColor(p);
    
    // 确保颜色值不会太暗
    fromColor.r = max(fromColor.r, 0.2);
    fromColor.g = max(fromColor.g, 0.2);
    fromColor.b = max(fromColor.b, 0.2);
    
    toColor.r = max(toColor.r, 0.2);
    toColor.g = max(toColor.g, 0.2);
    toColor.b = max(toColor.b, 0.2);
    
    // 在过渡区域内混合两种颜色
    return mix(fromColor, toColor, mixValue);
  }
}